home *** CD-ROM | disk | FTP | other *** search
/ Aminet 13 / Aminet 13 - August 1996.iso / Aminet / comm / maxs / CMaxGu16.lha / CydalMaxGuide16 / format.a < prev    next >
Text File  |  1996-03-13  |  6KB  |  225 lines

  1.         xdef   _formatfile
  2.  
  3.         section code
  4.  
  5. ; A0 ^ fil
  6. ; A1 ^ dato "00-00-00"
  7. ; D0 = Nyflag (BOOL)
  8.  
  9. _formatfile:
  10.         movem.l d2-d7/a2-a6,-(sp)
  11.         move.l  d0,d6
  12.         tst.w   SplitInit
  13.         bne.b   .iniok
  14.         not.w   SplitInit
  15.         lea     SplitMap,a2
  16.         moveq   #0,d0
  17.         subq.b  #1,d0
  18. .inilp: clr.b   (a2)+
  19.         dbra    d0,.inilp
  20.         lea     SplitMap,a2
  21.         st      (a2)
  22.         st      ' '(a2)
  23.         st      '.'(a2)
  24.         st      '/'(a2)
  25.         st      '!'(a2)
  26.  
  27. .iniok: lea     MyString,a6
  28.         move.l   #32<<24+32<<16+32<<8+32,d7
  29.         ; WRITE OUT THE NAME
  30.         lea     18(a0),a2       ; a2 ^ name
  31.         move.l  a2,d0           ; d0 ^ name
  32. .lp:    move.b  (a2)+,(a6)+     ; copy name
  33.         bne.b   .lp
  34.         move.b  d7,-1(a6)
  35.         sub.l   a2,d0
  36.         neg.w   d0
  37.         sub.w   #24,d0          ; this is the actual max length ± a few bytes :-)
  38.         bgt.b   .toolong
  39.         neg.w   d0
  40.         subq.w  #1,d0
  41.         blt.b   .ok
  42.         ; TOO SHORT
  43. .lp2:   move.b  d7,(a6)+
  44.         dbra    d0,.lp2
  45.         bra.b   .ok
  46.         ; TOO LONG
  47. .toolong:
  48.         sub.w   d0,a6
  49.         move.w  #'!'<<8+32,-2(a6)
  50. .ok:
  51.         move.b  d7,(a6)+
  52.         ; WRITE OUT THE SIZE
  53.         move.l  #$ffff,d0
  54.         move.b  d7,(a6)+
  55.         move.b  d7,(a6)+
  56.         move.b  d7,(a6)+
  57.         move.l  8(a0),d2
  58.         lsr.l   #8,d2
  59.         lsr.l   #2,d2
  60.         bne.b   .not0
  61.         moveq   #1,d2
  62. .not0:  move.b  #'K',d1
  63.         cmp.l   #999,d2
  64.         ble.b   .ok2
  65.         divu    #102,d2
  66.         ext.l   d2
  67.         move.b  #'M',(a6)+
  68.         divu    #10,d2
  69.         swap    d2
  70.         add.b   #'0',d2
  71.         move.b  d2,-2(a6)
  72.         move.b  #'.',-3(a6)
  73.         swap    d2
  74.         add.b   #'0',d2
  75.         move.b  d2,-4(a6)
  76.         bra.b   .skip
  77. .ok2:   move.l  a6,a5
  78.         move.b  d1,(a6)+
  79. Loop:   divu    #10,d2
  80.           swap    d2
  81.           add.b    #'0',d2
  82.           move.b    d2,-(a5)
  83.           swap    d2
  84.           and.l    d0,d2
  85.           bne.S    Loop
  86. .skip:  move.b  d7,(a6)+
  87.         move.b  d7,(a6)+
  88.  
  89.         ; WRITE OUT THE DATE
  90.         move.b  (a1)+,(a6)+
  91.         move.b  (a1)+,(a6)+
  92.         move.b  (a1)+,(a6)+
  93.         move.b  (a1)+,(a6)+
  94.         move.b  (a1)+,(a6)+
  95.         move.b  (a1)+,(a6)+
  96.         move.b  (a1)+,(a6)+
  97.         move.b  (a1)+,(a6)+
  98.         move.b  (a1)+,(a6)+
  99.         move.b  d7,(a6)+
  100.         move.b  d7,(a6)+
  101.         tst.b   d6
  102.         beq.b   .old
  103.         move.b  #'*',-2(a6)
  104. .old:
  105.  
  106.         ; WRITE OUT THE DL COUNT
  107.         move.l  12(a0),d0
  108.         cmp.l   #100,d0
  109.         blo.b   .nocut
  110.         moveq   #99,d0                  ; gee, this BBS is popular.. >100 dl's of this file!!!
  111. .nocut: divu    #10,d0
  112.         add.l   #'0'*$10001,d0
  113.         move.b  #'[',(a6)+
  114.         move.b  d0,(a6)+
  115.         swap    d0
  116.         move.b  d0,(a6)+
  117.         move.b  #']',(a6)+
  118.         move.b  d7,(a6)+
  119.         move.b  d7,(a6)+
  120.  
  121.         ; WRITE OUT THE DESCRIPTION
  122.         lea     59(a0),a2
  123.         lea     SplitMap,a4
  124.         moveq   #0,d1
  125. .lp4:   cmp.b   (a2),d7
  126.         bne.b   .nospacefirst
  127.         addq.l  #1,a2
  128.         bra.b   .lp4
  129. .nospacefirst:
  130.         moveq   #27,d0
  131.         sub.l   a3,a3
  132. .lp3:   move.b  (a2)+,d1  ; AT THIS POINT TRY TO FIND A VALID CHAR TO OUTPUT
  133.         beq.w   .done     ; TERMINATE AT NULL CHAR
  134.         cmp.b   d7,d1     ; SKIP CHARS < ASCII 32
  135.         blo.b   .lp3
  136.         bne.b   .no2space
  137. .morespace:
  138.         cmp.b   (a2),d7   ; SKIP DUPLICATE CHARS <= ASCII 32
  139.         bhs.b   .lp3
  140. .no2space:        
  141.         move.b  d1,(a6)+
  142.         tst.b   (a4,d1.w) ; REMEMBER POSITION OF LAST SEPARATOR FOR WORD WRAP
  143.         beq.b   .nope
  144.         move.l  a2,a3
  145.         move.l  a6,a5
  146. .nope:  dbra    d0,.lp3   ; STOP AT THE MAXIMUM LENGTH OF LINE
  147.         ; CHECK IF ALL THAT REMAINS IS SEPARATORS, IF SO DON'T LOOP--LOOKS UGLY!
  148.         move.l  a2,a1
  149. .clp:   move.b  (a1)+,d1
  150.         beq.b   .done
  151.         tst.b   (a4,d1.w)
  152.         bne.b   .clp
  153.         ; GO BACK TO LAST SEPARATOR, IF ANY, AND BREAK THE LINE THERE = WORD WRAPPING
  154.         cmp.l   #0,a3
  155.         beq.b   .hard
  156.         move.l  a3,a2
  157.         move.l  a5,a6
  158.         ; MAKE NEWLING AND INDENT FOR NEXT LINE
  159. .hard:  move.b  #10,(a6)+
  160.  
  161.         move.b  d7,(a6)+  ; I wonder what SAS meant by not making a REPT directive
  162.         move.b  d7,(a6)+
  163.         move.b  d7,(a6)+
  164.         move.b  d7,(a6)+
  165.         move.b  d7,(a6)+
  166.         move.b  d7,(a6)+
  167.         move.b  d7,(a6)+
  168.         move.b  d7,(a6)+
  169.         move.b  d7,(a6)+
  170.         move.b  d7,(a6)+
  171.         move.b  d7,(a6)+
  172.         move.b  d7,(a6)+
  173.         move.b  d7,(a6)+
  174.         move.b  d7,(a6)+
  175.         move.b  d7,(a6)+
  176.         move.b  d7,(a6)+
  177.         move.b  d7,(a6)+
  178.         move.b  d7,(a6)+
  179.         move.b  d7,(a6)+
  180.         move.b  d7,(a6)+
  181.         move.b  d7,(a6)+
  182.         move.b  d7,(a6)+
  183.         move.b  d7,(a6)+
  184.         move.b  d7,(a6)+
  185.         move.b  d7,(a6)+
  186.         move.b  d7,(a6)+
  187.         move.b  d7,(a6)+
  188.         move.b  d7,(a6)+
  189.         move.b  d7,(a6)+
  190.         move.b  d7,(a6)+
  191.         move.b  d7,(a6)+
  192.         move.b  d7,(a6)+
  193.         move.b  d7,(a6)+
  194.         move.b  d7,(a6)+
  195.         move.b  d7,(a6)+
  196.         move.b  d7,(a6)+
  197.         move.b  d7,(a6)+
  198.         move.b  d7,(a6)+
  199.         move.b  d7,(a6)+
  200.         move.b  d7,(a6)+
  201.         move.b  d7,(a6)+
  202.         move.b  d7,(a6)+
  203.         move.b  d7,(a6)+
  204.         move.b  d7,(a6)+
  205.         move.b  d7,(a6)+
  206.         move.b  d7,(a6)+
  207.         move.b  d7,(a6)+
  208.         move.b  d7,(a6)+
  209.  
  210.         bra.w   .lp4
  211.  
  212. .done:  move.b  #10,(a6)+
  213.         clr.b   (a6)
  214.         movem.l (sp)+,d2-d7/a2-a6
  215.         move.l  #MyString,d0
  216.         rts
  217.  
  218.  
  219. MyString:       ds.b    300
  220.  
  221. SplitMap:       ds.b    256
  222. SplitInit:      dc.w    0
  223.  
  224.                 end
  225.